package k8s

import (
	"context"

	corev1 "k8s.io/api/core/v1"
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	core "k8s.io/client-go/kubernetes/typed/core/v1"
)

func NewNamespace(cli *kubernetes.Clientset) *Namespace {
	return &Namespace{
		core: cli.CoreV1(),
	}
}

type Namespace struct {
	core core.CoreV1Interface
}

// 获取命名空间列表
func (s *Namespace) GetNamespaces(ctx context.Context, req *v1.ListOptions) (*corev1.NamespaceList, error) {
	return s.core.Namespaces().List(ctx, *req)
}

// 获取命名空间详情
func (s *Namespace) GetNamespaceDetails(ctx context.Context, name string) (*corev1.Namespace, error) {
	return s.core.Namespaces().Get(ctx, name, v1.GetOptions{})
}

// 创建命名空间
func (s *Namespace) CreateNamespace(ctx context.Context, ns *corev1.Namespace) (*corev1.Namespace, error) {
	return s.core.Namespaces().Create(ctx, ns, v1.CreateOptions{})
}

// 删除命名空间
func (s *Namespace) DeleteNamespace(ctx context.Context, name string) error {
	return s.core.Namespaces().Delete(ctx, name, v1.DeleteOptions{})
}

// 更新命名空间
func (s *Namespace) UpdateNamespace(ctx context.Context, ns *corev1.Namespace) (*corev1.Namespace, error) {
	return s.core.Namespaces().Update(ctx, ns, v1.UpdateOptions{})
}
